我有一个程序,它根据结果以某种方式对返回的结果集进行颜色编码。由于对结果进行颜色编码所需的时间较长(目前使用 Regex 和 RichTextBox.Select + .SelectionColor 完成),我在 400 个结果处切断了颜色编码。在这个数字左右,大约需要 20 秒,这大约是我认为合理的最长时间。
为了尝试提高性能,我重写了 Regex 部分以使用循环Parallel.ForEach来迭代MatchCollection,但时间大致相同(18-19 秒 vs 20 秒)!难道这个工作不太适合并行编程吗?我应该尝试一些不同的东西吗?欢迎任何建议。谢谢!
PS:我觉得有点奇怪,无论有没有 Parallel.ForEach,我的 CPU 利用率都没有达到 14% 左右。
代码
MatchCollection startMatches = Regex.Matches(tempRTB.Text, startPattern);
object locker = new object();
System.Threading.Tasks.Parallel.ForEach(startMatches.Cast<Match>(), m =>
{
int i = 0;
foreach (Group g in m.Groups)
{
if (i > 0 && i < 5 && g.Length > 0)
{
tempRTB.Invoke(new Func<bool>(
delegate
{
lock (locker)
{
tempRTB.Select(g.Index, g.Length);
if ((i & 1) == …Run Code Online (Sandbox Code Playgroud) 2Tableviews在一个ViewController具有不同大小的单元格高度。当我滚动时view controller,需要同时滚动tableview cell两个表格单元格也需要同时隐藏。
200px height顶部 tableview 中的单元格,50px height底部 tableview。
当我滑动 100px 时,顶部表格单元格滚动 100 px,底部表格单元格应该滚动 25px。
这种平行滚动可能吗?任何建议.. 提前致谢
parallel-processing objective-c uitableview uiscrollview ios
我有 100 多个文件要导入 sql server,其中大部分是 500 MB。我想利用 SQL Server 的并行导入实用程序并阅读了许多网页,如下所示:
如何在 30 分钟内加载 1 TB 数据
https://technet.microsoft.com/en-us/library/dd537533(v=sql.100).aspx
使用表级锁定并行导入数据
https://technet.microsoft.com/en-us/library/ms186341(v=sql.105).aspx
控制批量导入的锁定行为
https://technet.microsoft.com/en-us/library/ms180876(v=sql.105).aspx
以及 stackoverflow 中的答案
然而,他们都没有给出一个简单的代码示例。我知道如何使用批量插入/bcp,但我不知道从哪里开始并行导入?任何人都可以帮助我吗?
我的系统是Windows,我使用的是SQL server 2016。源数据文件为txt格式。
在此先感谢您的帮助!
杰森
sql-server parallel-processing bulkinsert sqlbulkcopy bulk-load
如何并行构建包以减少 make 命令花费的时间(Golang)
我当前的目录是“雷神”
在我的Makefile里面
build:
go build -o thor
go build thor/package1
go build thor/scripts/package2
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,所有的包都是独立运行的独立进程。当我运行make命令时,每个包都一个一个地构建。因此,如果每个包构建需要 30 秒,则总共需要 90 秒(30 秒 * 3)。但如果我可以并行构建这些包,只需要 30 秒。
在 shell 脚本的情况下,这种情况可以通过使用&在后台运行每个脚本并使用wait 等待每个脚本结束来处理
示例代码
#!/bin/bash
echo "Starts"
./s1.sh &
./s2.sh &
./s3.sh &
wait
echo "ends"
Run Code Online (Sandbox Code Playgroud)
在上述情况下,所有脚本 s1.sh , s2.sh , s3.sh 将同时运行并等待所有进程完成。
那么,我们可以在 Makefile 中也做这样的事情吗:)
我对 Spark 很陌生,我试图在网上寻找一些东西,但我没有找到任何令人满意的东西。
我一直使用该命令运行并行计算mclapply,我喜欢它的结构(即,第一个参数用作滚动索引,第二个参数是要并行化的函数,然后是传递给函数的其他可选参数)。现在我试图通过 Spark 做同样的事情,即,我想在 Spark 集群的所有节点之间分配我的计算。这就是我所学到的以及我认为应该如何构建代码的内容(我正在使用包sparklyr):
spark_connect;copy_to并通过它的tibble访问它;mclapply,但我已经看到有在包(我已经看到了存在的功能没有类似功能spark.lapply的SparkR包,但不幸的是它是不是在CRAN了)。下面是我实现的一个简单的测试脚本,它使用函数mclapply.
#### Standard code that works with mclapply #########
dfTest = data.frame(X = rep(1, 10000), Y = rep(2, 10000))
.testFunc = function(X = 1, df, str) {
rowSelected = df[X, ]
y = as.numeric(rowSelected[1] + rowSelected[2])
return(list(y = y, str = str))
}
lOutput = mclapply(X = 1 …Run Code Online (Sandbox Code Playgroud) 可能看起来像一个微不足道的问题,但不幸的是无法让它工作
这是代码
from("direct:START")
.process( (ex) -> {
List<Integer> pages = IntStream.range(1,5).boxed().collect(Collectors.toList());
ex.getOut().setBody( pages );
})
.split(body())
.parallelProcessing()
.to("http://someurl?page=${body}");
--> Get the collective body here
Run Code Online (Sandbox Code Playgroud)
如何获得这份工作!
我试图理解为什么std::for_each在单线程上运行的~3速度比__gnu_parallel::for_each下面的例子快几倍:
Time =0.478101 milliseconds
Run Code Online (Sandbox Code Playgroud)
对比
Time =0.166421 milliseconds
Run Code Online (Sandbox Code Playgroud)
这是我用来进行基准测试的代码:
#include <iostream>
#include <chrono>
#include <parallel/algorithm>
//The struct I'm using for timming
struct TimerAvrg
{
std::vector<double> times;
size_t curr=0,n;
std::chrono::high_resolution_clock::time_point begin,end;
TimerAvrg(int _n=30)
{
n=_n;
times.reserve(n);
}
inline void start()
{
begin= std::chrono::high_resolution_clock::now();
}
inline void stop()
{
end= std::chrono::high_resolution_clock::now();
double duration=double(std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count())*1e-6;
if ( times.size()<n)
times.push_back(duration);
else{
times[curr]=duration;
curr++;
if (curr>=times.size()) curr=0;}
}
double getAvrg()
{
double sum=0;
for(auto t:times)
sum+=t;
return sum/double(times.size());
}
}; …Run Code Online (Sandbox Code Playgroud) 我正在输入缺失值,missRanger因为我有 1000 个变量,所以花费的时间太长。我尝试使用并行计算,但它并没有使过程更快。这是代码
library(doParallel)
cores=detectCores()
cl <- makeCluster(cores[1]-1)
registerDoParallel(cl)
library(missRanger)
train[1:lengthvar] <- missRanger(train[1:lengthvar], pmm.k = 3, num.trees = 100)
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)
我不确定要向此代码添加什么才能使其正常工作。
这是我第一次尝试用 CUDA 实现递归。目标是使用 CUDA 的强大功能从一组字符“12345”中提取所有组合以动态并行化任务。这是我的内核:
__device__ char route[31] = { "_________________________"};
__device__ char init[6] = { "12345" };
__global__ void Recursive(int depth) {
// up to depth 6
if (depth == 5) return;
// newroute = route - idx
int x = depth * 6;
printf("%s\n", route);
int o = 0;
int newlen = 0;
for (int i = 0; i<6; ++i)
{
if (i != threadIdx.x)
{
route[i+x-o] = init[i];
newlen++;
}
else
{
o = 1;
}
} …Run Code Online (Sandbox Code Playgroud) 我想连续运行n 个任务,但是这些任务是内存密集型的,我希望一次只有x 个处于活动状态。但最终所有这n 个任务都应该通过它们之间的上下文切换来运行。
简而言之,我想要另一种实现FixedThreadPool,其中额外的任务也应该与上下文切换一起运行。
我们是否有实现相同的线程池变体?或者有什么其他的实现方式?
更新:在阅读了一点并阅读下面的答案后,决定“分而治之”,即将连续运行的任务分解为小的短期任务单元,并一次又一次地提交给 FixedThreadPool
java parallel-processing performance multithreading threadpoolexecutor
r ×2
.net-4.0 ×1
apache-camel ×1
apache-spark ×1
bulk-load ×1
bulkinsert ×1
c# ×1
c++ ×1
concurrency ×1
cuda ×1
dynamic ×1
imputation ×1
ios ×1
java ×1
makefile ×1
mclapply ×1
missing-data ×1
objective-c ×1
performance ×1
regex ×1
rest ×1
sparklyr ×1
split ×1
sql-server ×1
sqlbulkcopy ×1
stl ×1
uiscrollview ×1
uitableview ×1