并行基数排序OpenMP C

时间:2018-09-30 19:01:24

标签: c openmp

我尝试使用OpenMP并行化以下基数排序算法:

library(shiny)
library(shinydashboard)

ui <- shinyUI(
  dashboardPage(
    header = dashboardHeader(title = 'R Code'),
    sidebar = dashboardSidebar(menu),
    body = dashboardBody(
      tags$head(tags$script(type = 'text/javascript', src = '//cdn.datacamp.com/dcl-react.js.gz')),
      HTML('
        <div data-datacamp-exercise data-lang="r">
          <code data-type="pre-exercise-code">
          # This will get executed each time the exercise gets initialized
          b = 6
        </code>
          <code data-type="sample-code">
          # Create a variable a, equal to 5


          # Print out a


          </code>
          <code data-type="solution">
          # Create a variable a, equal to 5
          a <- 5

        # Print out a
        print(a)
        </code>
          <code data-type="sct">
          test_object("a")
        test_function("print")
        success_msg("Great job!")
        </code>
          <div data-type="hint">Use the assignment operator (<code><-</code>) to create the variable <code>a</code>.</div>
          </div>'
      )
    )
  )
)

server <- function(input, output) {}

shinyApp(ui, server)

我想知道我使用void radixSortEdgesBySource(struct Edge *edges_sorted, struct Edge *edges, int numVertices, int numEdges) { int i, j, d, c; int key; int pos; int maximum = 0; int *vertex_cnt = (int*)malloc(numVertices*sizeof(int)); maximum = edges[0].src; for (c = 0; c < numEdges; c++) { if (edges[c].src > maximum) { maximum = edges[c].src; } } while(maximum != 0) { maximum /= 10; ++d; } for (j = 1; j < d; j++) { #pragma omp parallel for num_threads(4) for(i = 0; i < numVertices; ++i) vertex_cnt[i] = 0; } #pragma omp parallel for num_threads(4) for(i = 0; i < numEdges; ++i) { key = edges[i].src; vertex_cnt[key]++; } for(i = 1; i < numVertices; ++i) { vertex_cnt[i] += vertex_cnt[i - 1]; } #pragma omp parallel for num_threads(4) for (i = numEdges - 1; i >= 0; --i) { key = edges[i].src; pos = vertex_cnt[key] - 1; edges_sorted[pos] = edges[i]; vertex_cnt[key]--; } } free(vertex_cnt); } 的方式是否正确?因为我并没有真正看到执行速度有任何重大变化。

我还要如何并行化执行累加求和的循环块?

0 个答案:

没有答案