我在使用MKL库触发R线程时遇到问题。我目前使用的是 Ubuntu 18.04.2 LTS。
\n\nLinux pedro-HP-EliteOne-800-G1-AiO 4.18.0-15-generic #16~18.04.1-Ubuntu SMP Thu Feb 7 14:06:04 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n\nr-open$ screenfetch \n ./+o+- pedro@pedro-HP-EliteOne-800-G1-AiO\n yyyyy- -yyyyyy+ OS: Ubuntu 18.04 bionic\n ://+//////-yyyyyyo Kernel: x86_64 Linux 4.18.0-15-generic\n .++ .:/++++++/-.+sss/` Uptime: 19h 27m\n .:++o: /++++++++/:--:/- Packages: 1834\n o:+o+:++.`..```.-/oo+++++/ Shell: bash\n .:+o:+o/. `+sssoo+/ Resolution: 1920x1080\n .++/+:+oo+o:` /sssooo. DE: GNOME \n /+++//+:`oo+o /::--:. WM: GNOME Shell\n \\+/+o+++`o++o ++////. WM Theme: Adwaita\n .++.o+++oo+:` /dddhhh. GTK Theme: Ambiance [GTK2/3]\n .+.o+oo:. `oddhhhh+ Icon Theme: ubuntu-mono-dark\n …Run Code Online (Sandbox Code Playgroud) 我们知道,Julia支持并行性,这是根植于非常好的语言的东西.
我最近看到Julia支持线程,但在我看来它是实验性的.我注意到在使用Threads.@Threads宏的情况下,不需要共享数组,这可能是计算优势,因为没有执行对象的副本.我还看到了没有声明所有功能的优点@everywhere.
谁能告诉我使用@parallel宏而不是宏的优势@threads?
下面是使用非同步宏进行并行化的两个简单示例.
使用@threads宏
addprocs(Sys.CPU_CORES)
function f1(b)
b+1
end
function f2(c)
f1(c)
end
result = Vector(10)
@time Threads.@threads for i = 1:10
result[i] = f2(i)
end
Run Code Online (Sandbox Code Playgroud)
0.015273秒(6.42 k分配:340.874 KiB)
使用@parallel宏
addprocs(Sys.CPU_CORES)
@everywhere function f1(b)
b+1
end
@everywhere function f2(c)
f1(c)
end
result = SharedArray{Float64}(10)
@time @parallel for i = 1:10
result[i] = f2(i)
end
Run Code Online (Sandbox Code Playgroud)
0.060588秒(68.66 k分配:3.625 MiB)
在我看来,对于蒙特卡罗模拟,其中循环在数学上是独立的,并且需要大量的计算性能,使用@threads宏更方便.您如何看待使用每个宏的优缺点?
最好的祝福.
我有一个关于在包结构之外使用Rcpp使用C++代码的问题.
为了澄清我的疑问,请考虑下面的C++代码(test.cpp):
// [[Rcpp::depends(RcppGSL)]]
#include <Rcpp.h>
#include <numeric>
#include <gsl/gsl_sf_bessel.h>
#include <RcppGSL.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
return x * 2;
}
// [[Rcpp::export]]
double my_bessel(double x){
return gsl_sf_bessel_J0 (x);
}
// [[Rcpp::export]]
int tamanho(NumericVector x){
int n = x.size();
return n;
}
// [[Rcpp::export]]
double soma2(NumericVector x){
double resultado = std::accumulate(x.begin(), x.end(), .0);
return resultado;
}
// [[Rcpp::export]]
Rcpp::NumericVector colNorm(const RcppGSL::Matrix & G) {
int k = …Run Code Online (Sandbox Code Playgroud) 我是朱莉娅的初学者,
如何创建带参数关键字的函数而不必在函数中初始化这些参数?
一个非常简单的例子:
function f(;a = 1, b = 2)
a+b
end
Run Code Online (Sandbox Code Playgroud)
我想要做:
function f(;a, b)
a+b
end
Run Code Online (Sandbox Code Playgroud)
最好的祝福.
亲爱的julia语言用户.使用Optim包的optimize功能时遇到问题.下面的代码有什么错误?
using Optim
using Distributions
rng = MersenneTwister(1234);
d = Weibull(1,1)
x = rand(d,1000)
function pdf_weibull(x, lambda, k)
k/lambda * (x/lambda).^(k-1) * exp((-x/lambda)^k)
end
function obj(x::Vector, lambda, k)
soma = 0
for i in x
soma = soma + log(pdf_weibull(i,lambda,k))
end
-soma
end
obj(x, pars) = obj(x, pars...)
optimize(vars -> obj(x, vars...), [1.0,1.0])
Run Code Online (Sandbox Code Playgroud)
产量
julia> optimize(vars -> obj(x, vars...), [1.0,1.0])
ERROR: DomainError:
Exponentiation yielding a complex result requires a complex argument.
Replace x^y with …Run Code Online (Sandbox Code Playgroud)