我正在优化矩阵数值热点.
目前,我正在进行阻塞和循环展开以提高性能.但是,我故意避免剥掉边界.相反,我让阻塞步骤溢出,当然,算法然后触及未初始化的值.
然而,矩阵被慷慨地预先分配以应对溢出,所以我实际上并不是非法访问内存位置.
剥皮有几个原因:
但是,我想知道这些触及未初始化值的溢出访问是否会导致性能下降?
我可以预见地知道未初始化的访问发生在哪里,并且它们也通过valgrind报告.我还使用英特尔的VTune对代码进行了分析,并且看不出有任何迹象表明由此导致的性能下降.
c++ optimization performance initialization micro-optimization
我提出了以下超级简单的FindMAGMA.cmake脚本来查找MAGMA库,因为周围没有:
# - Find the MAGMA library
#
# Usage:
# find_package(MAGMA [REQUIRED] [QUIET] )
#
# It sets the following variables:
# MAGMA_FOUND ... true if magma is found on the system
# MAGMA_LIBRARY_DIRS ... full path to magma library
# MAGMA_INCLUDE_DIRS ... magma include directory
# MAGMA_LIBRARIES ... magma libraries
#
# The following variables will be checked by the function
# MAGMA_USE_STATIC_LIBS ... if true, only static libraries are found
# MAGMA_ROOT ... if set, the libraries …Run Code Online (Sandbox Code Playgroud) 我跑glm了,结果好了.现在我想得到那些在95%显着的预测因子的名称,即p值小于或等于显着性水平5e-2.我跑:
fit <- glm(data=dfa, formula=response~.)
sig <- summary(fit)$coefficients[,4]
(Intercept) close0 close1 close2 close3 close4 closema open0
0.000000e+00 3.147425e-19 7.210909e-04 1.046019e-02 4.117580e-03 2.778701e-01 2.829958e-05 0.000000e+00
open1 open2 open3 open4 openma low0 low1 low2
8.627202e-30 1.138499e-02 1.112236e-03 7.422145e-03 3.967735e-03 3.036329e-42 3.033847e-05 3.237155e-01
low3 low4 lowma high0 high1 high2 high3 high4
8.198750e-01 6.647138e-02 4.350488e-05 6.177130e-58 2.625192e-02 4.143373e-01 3.964651e-01 3.694272e-01
highma volume0 volume1 volume2 volume3 volume4 volumema
1.416310e-05 8.027502e-02 1.975302e-01 1.630341e-09 8.979313e-03 1.274195e-06 8.246661e-01
> str(sig)
Named num [1:31] 0.00 3.15e-19 7.21e-04 …Run Code Online (Sandbox Code Playgroud) 我正在使用Boost 1.54 Log并以下列方式初始化我的日志记录:
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace sinks = boost::log::sinks;
namespace attrs = boost::log::attributes;
namespace keywords = boost::log::keywords;
BOOST_LOG_ATTRIBUTE_KEYWORD(line_id, "LineID", unsigned int)
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", severity_level)
BOOST_LOG_ATTRIBUTE_KEYWORD(tag_attr, "Tag", std::string)
BOOST_LOG_ATTRIBUTE_KEYWORD(timestamp, "TimeStamp", boost::posix_time::ptime)
logging::add_common_attributes();
boost::shared_ptr<logging::core> core = logging::core::get();
// setup console log
logging::add_console_log (
std::clog,
keywords::filter = severity >= debug,
keywords::format = (
expr::stream << expr::format_date_time(timestamp, "%Y-%m-%d %H:%M:%S") <<
line_id << " [" << severity << "] " << expr::smessage
)
);
Run Code Online (Sandbox Code Playgroud)
这是生成的输出的示例: …
我使用的是最新版本CUDA 5.5和新CUBLAS有状态的味道,每一个功能需要一个cublasHandle_t如
cublasHandle_t handle;
cublasCreate_v2(&handle);
cublasDgemm_v2(handle, A_trans, B_trans, m, n, k, &alpha, d_A, lda, d_B, ldb, &beta, d_C, ldc);
cublasDestroy_v2(handle);
Run Code Online (Sandbox Code Playgroud)
像某种类型那样尽可能多地重用这个句柄实例是一个好习惯,Session或者性能影响是如此之小以至于通过使用短生存句柄实例来降低代码复杂性更有意义,因此不断创建/销毁它?
在Scala Play 2.2.x测试的上下文中,我有一个Map[String, String]我需要传递给一个接受(String, String)*即(String, String)元组varargs的函数.
例如
val data : Map[String, String] = Map("value" -> "25", "id" -> "", "columnName" -> "trades")
route(FakeRequest(POST, "/whatever/do").withFormUrlEncodedBody(data))
Run Code Online (Sandbox Code Playgroud)
但这会导致类型不匹配,因为withFormUrlEncodedBody只接受一种(String, String)*类型.
我正在尝试自动填充我无法更改的现有网页中的元素,该页面使用Knockoutjs.input元素或多或少看起来像这样:
<input maxlength="8" id="xxx" data-bind="textInput: otcInput" type="tel">
Run Code Online (Sandbox Code Playgroud)
然后我使用Knockoutjs尝试取消绑定textInput并使用我需要的任何值动态填充输入元素,所以我这样做:
ko.cleanNode($('#xxx'));
ko.applyBindings({
otcInput: ko.observable("123") // populate myself
});
Run Code Online (Sandbox Code Playgroud)
但是,这会导致错误You cannot apply bindings multiple times to the same element......问题是为什么?我已经在清理节点......或者我不是吗?是否有一种方法可以使用knockoutjs来查看在尝试执行"覆盖"时是否存在悬挂的绑定或残留物ko.applyBindings?
我也尝试过其他方法通过JQuery sendkeys插件设置输入值,但没有成功
$('#xxx').sendkeys('123'); // nothing happens
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
$('#xxx').unbind();
$('#xxx').off();
$('#xxx').sendkeys('123'); // but again nothing happens
Run Code Online (Sandbox Code Playgroud) 我有一个org.scalatest.FunSpec with org.scalatest.Matchers测试可以执行以下操作,例如
val tol = 1e-10
val res = 1.000000000000001
val ref = 1.000000000000000
res should be (ref +- tol)
Run Code Online (Sandbox Code Playgroud)
但它在按名称键入的多个案例的循环中执行此操作,当然我无法更改测试代码的粒度,因此我得到了与这些名称关联的值的集合。因此,对于上面的测试,我需要放置额外的上下文或额外的描述name来反映它适用的名称。我需要类似的东西:
val name : String = ...
res should be (ref +- tol) for name
Run Code Online (Sandbox Code Playgroud)
此时我无法使用itand因为它们已经在外面了。describe
Python 中有没有一种简单的方法可以从 SQLite 逐表迁移到 Postgres?我正在使用 Peewee,可以生成 SQLite 转储,但没有可用于导入到 Postgres 的 psql。Python 中有一个包可以实现这个功能吗?我还使用 Peewee 作为 ORM,并且涵盖了生成模式位,问题是数据。
数据库有点大,1.3gb
我在Ubuntu 18.04上安装并sbt使用常规安装apt-get install sbt,到目前为止,它可用于所有项目,不知道它获得的版本。然后,我克隆了项目https://github.com/aishfenton/Argus,无论我做什么sbt都会崩溃。
我下载并安装了最新版本,sbt但仍然遇到以下崩溃:
skywalker@Zeus:~/code$ java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
skywalker@Zeus:~/code$ which sbt
/opt/dev/sbt/1.2.8/bin/sbt
skywalker@Zeus:~/code$ git clone https://github.com/aishfenton/Argus
Cloning into 'Argus'...
remote: Enumerating objects: 622, done.
remote: Total 622 (delta 0), reused 0 (delta 0), pack-reused 622
Receiving objects: 100% (622/622), 140.72 KiB | 602.00 KiB/s, done.
Resolving deltas: 100% (225/225), done.
skywalker@Zeus:~/code$ cd Argus
skywalker@Zeus:~/code/Argus$ …Run Code Online (Sandbox Code Playgroud) scala ×3
c++ ×2
boost ×1
boost-log ×1
cmake ×1
crash ×1
cublas ×1
cuda ×1
html ×1
javascript ×1
jquery ×1
knockout.js ×1
linux ×1
logging ×1
magma ×1
optimization ×1
peewee ×1
performance ×1
postgresql ×1
python ×1
r ×1
sbt ×1
scalatest ×1
sqlite ×1
ubuntu ×1